home *** CD-ROM | disk | FTP | other *** search
/ Pascal Super Library / Pascal Super Library (CW International)(1997).bin / LIBRARY / PAS_0693 / BITMASKS.TXT < prev    next >
Text File  |  1993-06-03  |  4KB  |  127 lines

  1. ─ Fido Pascal Conference ────────────────────────────────────────────── PASCAL ─
  2. Msg  : 286 of 360                                                               
  3. From : Ruurd Pels                          2:282/317.19         28 May 93  16:31 
  4. To   : David Todd                          1:259/423.0                           
  5. Subj : Masking......                                                          
  6. ────────────────────────────────────────────────────────────────────────────────
  7. Howdy David!
  8.  
  9. On 21 May 93, David Todd wrote the following message to All:
  10.  
  11. DT>  Can anybody tell me how to bitmask? Well here what I'm, doing. I am
  12. DT> setting the Map Mask Register to plane 0, and writing all the data needed
  13. DT> for plane 0 to the screen with a Movsb, samething with plane 1, and so on.
  14. DT> Now I want to mask out any pixels that are 0 on the palette. How would I go
  15. DT> about doing that? Do I have to do a compare for each pixel to make sure
  16. DT> it's not a 0, before I write it or what? Well thanks to anybody who can
  17. DT> help me...
  18.  
  19. ================= S T A R T   O F   L E C T U R E ========================
  20.  
  21. A lecture on Boolean Algebra. Just look at bit 3, counting from 0
  22. from the left.
  23.  
  24. ==============================AND=========================================
  25.  
  26. Before   :          01101110            bit 3 is ON
  27. Mask     :          00001000
  28.                     ---------AND
  29. Result   :          00001000            equals mask if bit 3 is ON
  30.                     ========
  31.  
  32. So for ANDing bits, the truth table for each bit is:
  33.  
  34.  
  35.       AND  |   0    |    1
  36.      ------+--------+--------
  37.        0   |   0    |    0
  38.      ------+--------+--------
  39.        1   |   0    |    1
  40.  
  41. Read this table as:
  42.  
  43.      0    AND  0    equals    0
  44.      0    AND  1    equals    0
  45.      1    AND  0    equals    0
  46.      1    AND  1    equals    1
  47.  
  48. Use: To check if a bit is set.
  49.  
  50. ============================OR============================================
  51.  
  52.  
  53. Before   :          01100110       bit 3 is OFF
  54. Mask     :          00001000
  55.                     ---------OR
  56. Result   :          01101110       bit 3 is ON
  57.                     ========
  58.  
  59. So you switched the bit ON, regardless of its state, without
  60. affecting the other bits. For each bit, the truth table for each bit is:
  61.  
  62.  
  63.       OR   |   0    |    1
  64.      ------+--------+--------
  65.        0   |   0    |    1
  66.      ------+--------+--------
  67.        1   |   1    |    1
  68.  
  69. Use: To switch a bit on regardless of its prior state.
  70. ====================================XOR===================================
  71.  
  72. Before   :          01101110      bit 3 is on
  73. Mask     :          00001000
  74.                     ---------XOR
  75. Result   :          01100110      bit 3 is off
  76. Mask     :          00001000
  77.                     ---------XOR
  78. Result   :          01101110      bit 3 is on again
  79.                     ========
  80.  
  81. So for XORing bits, the truth table for each bit is:
  82.  
  83.  
  84.       XOR  |   0    |    1
  85.      ------+--------+--------
  86.        0   |   0    |    1
  87.      ------+--------+--------
  88.        1   |   1    |    0
  89.  
  90. Use: To toggle a bit regardless of its state
  91. ===============================NOT========================================
  92.  
  93. The effect of NOTing is inverting each bit in a variable.
  94.  
  95. Truth table:
  96.  
  97.      NOT(1) --> 0
  98.      NOT(0) --> 1
  99.  
  100. So if you NOT the mask, you get:
  101.  
  102.      NOT(00001000) --> 11110111
  103.  
  104. So if you want to switch a bit off, regardless of state, you do this:
  105.  
  106.  
  107. Before   :                         01101110       bit 3 is ON}
  108. Mask     :    NOT(00001000) -->    11110111
  109.                                    ---------AND
  110. Result                             01100110       bit 3 is OFF
  111.                                    ========
  112.  
  113. ===============================NOT========================================
  114.  
  115. Keep in mind that all operators are binary, except for NOT, which is unary.
  116.  
  117. =================== E N D   O F   L E C T U R E ==========================
  118.  
  119. By substituting a different value for the mask, you may manipulate more than
  120. one bit  at the same time.
  121.  
  122. Grtz, RFP ;-)
  123.  
  124. --- FMail 0.94
  125.  * Origin: Mail Munger (2:282/317.19)
  126.  
  127.